crisphive 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +183 -16
- data/crisphive.gemspec +5 -5
- data/lib/crisphive/api/business_skill_api.rb +502 -8
- data/lib/crisphive/api/customer_api.rb +20 -14
- data/lib/crisphive/api/job_request_business_api.rb +1273 -167
- data/lib/crisphive/api/job_types_api.rb +214 -2
- data/lib/crisphive/api/permission_api.rb +79 -0
- data/lib/crisphive/api/service_area_api.rb +214 -6
- data/lib/crisphive/api/technician_api.rb +510 -6
- data/lib/crisphive/api/technician_time_off_api.rb +240 -0
- data/lib/crisphive/api/vehicle_api.rb +214 -6
- data/lib/crisphive/api/webhooks_api.rb +213 -0
- data/lib/crisphive/api_client.rb +2 -2
- data/lib/crisphive/api_error.rb +2 -2
- data/lib/crisphive/configuration.rb +3 -3
- data/lib/crisphive/models/api_internal_techtimeoff_actions.rb +232 -0
- data/lib/crisphive/models/api_internal_techtimeoff_status.rb +42 -0
- data/lib/crisphive/models/assignable_group.rb +289 -0
- data/lib/crisphive/models/book_and_confirm_job_request200_response.rb +253 -0
- data/lib/crisphive/models/commit_absence_resolve200_response.rb +253 -0
- data/lib/crisphive/models/commit_emergency_reschedule200_response.rb +253 -0
- data/lib/crisphive/models/commit_job_request_move200_response.rb +253 -0
- data/lib/crisphive/models/create_customer200_response.rb +5 -2
- data/lib/crisphive/models/create_job_request200_response.rb +5 -2
- data/lib/crisphive/models/create_job_type200_response.rb +253 -0
- data/lib/crisphive/models/create_service_area200_response.rb +253 -0
- data/lib/crisphive/models/create_skill200_response.rb +253 -0
- data/lib/crisphive/models/create_skill_category200_response.rb +253 -0
- data/lib/crisphive/models/create_technician200_response.rb +253 -0
- data/lib/crisphive/models/create_technician_time_off200_response.rb +253 -0
- data/lib/crisphive/models/create_vehicle200_response.rb +253 -0
- data/lib/crisphive/models/create_webhook_endpoint200_response.rb +253 -0
- data/lib/crisphive/models/customer.rb +13 -3
- data/lib/crisphive/models/customer_address.rb +2 -2
- data/lib/crisphive/models/customer_address_request.rb +11 -2
- data/lib/crisphive/models/customer_contact.rb +27 -7
- data/lib/crisphive/models/customer_create_request.rb +14 -4
- data/lib/crisphive/models/customer_create_response.rb +2 -2
- data/lib/crisphive/models/customer_list.rb +3 -3
- data/lib/crisphive/models/customer_list_item.rb +13 -3
- data/lib/crisphive/models/customer_profile.rb +2 -2
- data/lib/crisphive/models/customer_quick_books_link.rb +235 -0
- data/lib/crisphive/models/customer_service_area_ref.rb +225 -0
- data/lib/crisphive/models/customer_spending.rb +2 -2
- data/lib/crisphive/models/customer_technician_ref.rb +225 -0
- data/lib/crisphive/models/customer_tier_progress.rb +2 -2
- data/lib/crisphive/models/customer_update_request.rb +25 -22
- data/lib/crisphive/models/get_customer200_response.rb +5 -2
- data/lib/crisphive/models/get_job_request200_response.rb +5 -2
- data/lib/crisphive/models/get_job_request_timeline200_response.rb +5 -2
- data/lib/crisphive/models/get_job_type200_response.rb +5 -2
- data/lib/crisphive/models/get_service_area200_response.rb +5 -2
- data/lib/crisphive/models/get_technician200_response.rb +5 -2
- data/lib/crisphive/models/get_technician_schedule200_response.rb +253 -0
- data/lib/crisphive/models/get_vehicle200_response.rb +5 -2
- data/lib/crisphive/models/internal_jobrequest_http_address_req.rb +475 -0
- data/lib/crisphive/models/job_date.rb +5 -3
- data/lib/crisphive/models/job_date_business_range.rb +7 -3
- data/lib/crisphive/models/job_date_period.rb +2 -2
- data/lib/crisphive/models/job_date_period_entry.rb +4 -2
- data/lib/crisphive/models/job_request.rb +56 -6
- data/lib/crisphive/models/job_request_absence_alternative.rb +356 -0
- data/lib/crisphive/models/job_request_absence_alternative_cost.rb +275 -0
- data/lib/crisphive/models/job_request_absence_assignment.rb +319 -0
- data/lib/crisphive/models/job_request_absence_commit_request.rb +296 -0
- data/lib/crisphive/models/job_request_absence_notification.rb +283 -0
- data/lib/crisphive/models/job_request_absence_plan.rb +322 -0
- data/lib/crisphive/models/job_request_absence_preview_request.rb +280 -0
- data/lib/crisphive/models/job_request_absence_resolved_job.rb +499 -0
- data/lib/crisphive/models/job_request_absence_solver.rb +289 -0
- data/lib/crisphive/models/job_request_absence_time_off.rb +281 -0
- data/lib/crisphive/models/job_request_absence_unresolved_job.rb +364 -0
- data/lib/crisphive/models/job_request_action_audit_by.rb +2 -2
- data/lib/crisphive/models/job_request_action_audit_entry.rb +3 -3
- data/lib/crisphive/models/job_request_action_summary.rb +3 -3
- data/lib/crisphive/models/job_request_address_summary.rb +2 -2
- data/lib/crisphive/models/job_request_archive_summary.rb +2 -2
- data/lib/crisphive/models/job_request_arrival_window.rb +4 -4
- data/lib/crisphive/models/job_request_assigned_vehicle.rb +2 -2
- data/lib/crisphive/models/job_request_assignment_summary.rb +2 -2
- data/lib/crisphive/models/job_request_attention_summary.rb +259 -0
- data/lib/crisphive/models/job_request_available_vehicle.rb +235 -0
- data/lib/crisphive/models/job_request_blocker.rb +363 -0
- data/lib/crisphive/models/job_request_blocker_ref.rb +223 -0
- data/lib/crisphive/models/job_request_book_and_confirm_customer.rb +302 -0
- data/lib/crisphive/models/job_request_book_and_confirm_emergency.rb +315 -0
- data/lib/crisphive/models/job_request_book_and_confirm_emergency_result.rb +279 -0
- data/lib/crisphive/models/job_request_book_and_confirm_refusal.rb +280 -0
- data/lib/crisphive/models/job_request_book_and_confirm_request.rb +466 -0
- data/lib/crisphive/models/job_request_book_and_confirm_response.rb +295 -0
- data/lib/crisphive/models/job_request_booking_windows.rb +2 -2
- data/lib/crisphive/models/job_request_buddy_slot_candidates.rb +239 -0
- data/lib/crisphive/models/job_request_business_time_range.rb +3 -3
- data/lib/crisphive/models/job_request_changes.rb +2 -2
- data/lib/crisphive/models/job_request_confirm_request.rb +255 -0
- data/lib/crisphive/models/job_request_create_request.rb +61 -7
- data/lib/crisphive/models/job_request_create_response.rb +2 -2
- data/lib/crisphive/models/job_request_crew_candidates.rb +227 -0
- data/lib/crisphive/models/job_request_crew_change.rb +299 -0
- data/lib/crisphive/models/job_request_crew_member.rb +7 -4
- data/lib/crisphive/models/job_request_crew_member_input.rb +284 -0
- data/lib/crisphive/models/job_request_crew_recommendation.rb +255 -0
- data/lib/crisphive/models/job_request_customer_summary.rb +2 -2
- data/lib/crisphive/models/job_request_day_windows.rb +3 -3
- data/lib/crisphive/models/job_request_emergency_candidate.rb +319 -0
- data/lib/crisphive/models/job_request_emergency_candidates.rb +311 -0
- data/lib/crisphive/models/job_request_emergency_candidates_request.rb +341 -0
- data/lib/crisphive/models/job_request_emergency_commit_request.rb +361 -0
- data/lib/crisphive/models/job_request_emergency_inline_job.rb +353 -0
- data/lib/crisphive/models/job_request_emergency_plan.rb +367 -0
- data/lib/crisphive/models/job_request_emergency_preview_request.rb +342 -0
- data/lib/crisphive/models/job_request_job_date_business_range_request.rb +3 -3
- data/lib/crisphive/models/job_request_job_date_period_request.rb +2 -2
- data/lib/crisphive/models/job_request_job_date_request.rb +3 -3
- data/lib/crisphive/models/job_request_lead_candidate.rb +311 -0
- data/lib/crisphive/models/job_request_list.rb +2 -2
- data/lib/crisphive/models/job_request_move_commit_req.rb +353 -0
- data/lib/crisphive/models/job_request_move_member.rb +299 -0
- data/lib/crisphive/models/job_request_move_plan.rb +387 -0
- data/lib/crisphive/models/job_request_move_preview_req.rb +300 -0
- data/lib/crisphive/models/job_request_move_warning.rb +335 -0
- data/lib/crisphive/models/job_request_period.rb +2 -2
- data/lib/crisphive/models/job_request_priority_update_result.rb +217 -0
- data/lib/crisphive/models/job_request_quote_request.rb +343 -0
- data/lib/crisphive/models/job_request_quote_summary.rb +2 -2
- data/lib/crisphive/models/job_request_rating_summary.rb +2 -2
- data/lib/crisphive/models/job_request_reassign_fallback.rb +287 -0
- data/lib/crisphive/models/job_request_reschedule_day.rb +227 -0
- data/lib/crisphive/models/job_request_reschedule_move.rb +319 -0
- data/lib/crisphive/models/job_request_reschedule_reassignment.rb +339 -0
- data/lib/crisphive/models/job_request_schedule.rb +2 -2
- data/lib/crisphive/models/job_request_session.rb +8 -7
- data/lib/crisphive/models/job_request_skill_summary.rb +3 -3
- data/lib/crisphive/models/job_request_status_summary.rb +3 -3
- data/lib/crisphive/models/job_request_tech_candidate.rb +287 -0
- data/lib/crisphive/models/job_request_technician_info.rb +2 -2
- data/lib/crisphive/models/job_request_time_segments.rb +287 -0
- data/lib/crisphive/models/job_request_time_segments_business_time.rb +321 -0
- data/lib/crisphive/models/job_request_time_segments_day.rb +247 -0
- data/lib/crisphive/models/job_request_time_segments_slot.rb +375 -0
- data/lib/crisphive/models/job_request_time_segments_worker.rb +295 -0
- data/lib/crisphive/models/job_request_timeline.rb +2 -2
- data/lib/crisphive/models/job_request_timeline_action.rb +2 -2
- data/lib/crisphive/models/job_request_timeline_event.rb +2 -2
- data/lib/crisphive/models/job_request_update_priority_request.rb +295 -0
- data/lib/crisphive/models/job_type.rb +44 -4
- data/lib/crisphive/models/job_type_create_request.rb +399 -0
- data/lib/crisphive/models/job_type_create_response.rb +215 -0
- data/lib/crisphive/models/job_type_update_request.rb +400 -0
- data/lib/crisphive/models/list_assignable_groups200_response.rb +255 -0
- data/lib/crisphive/models/list_crew_candidates200_response.rb +253 -0
- data/lib/crisphive/models/list_customers200_response.rb +5 -2
- data/lib/crisphive/models/list_emergency_candidates200_response.rb +253 -0
- data/lib/crisphive/models/list_job_request_booking_windows200_response.rb +5 -2
- data/lib/crisphive/models/list_job_request_changes200_response.rb +5 -2
- data/lib/crisphive/models/list_job_requests200_response.rb +5 -2
- data/lib/crisphive/models/list_job_types200_response.rb +5 -2
- data/lib/crisphive/models/list_matching_slots200_response.rb +253 -0
- data/lib/crisphive/models/list_nearby_technicians200_response.rb +253 -0
- data/lib/crisphive/models/list_service_areas200_response.rb +5 -2
- data/lib/crisphive/models/list_skill_categories200_response.rb +5 -2
- data/lib/crisphive/models/list_skills200_response.rb +5 -2
- data/lib/crisphive/models/list_skills_by_category200_response.rb +5 -2
- data/lib/crisphive/models/list_technician_skills200_response.rb +253 -0
- data/lib/crisphive/models/list_technician_time_off200_response.rb +253 -0
- data/lib/crisphive/models/list_technicians200_response.rb +5 -2
- data/lib/crisphive/models/list_vehicles200_response.rb +5 -2
- data/lib/crisphive/models/list_webhook_event_types200_response.rb +255 -0
- data/lib/crisphive/models/nearby_technician.rb +319 -0
- data/lib/crisphive/models/nearby_technicians.rb +237 -0
- data/lib/crisphive/models/pagination.rb +7 -2
- data/lib/crisphive/models/quote_job_request200_response.rb +253 -0
- data/lib/crisphive/models/replace_technician_service_areas200_response.rb +253 -0
- data/lib/crisphive/models/response_envelope.rb +6 -2
- data/lib/crisphive/models/service_area.rb +23 -3
- data/lib/crisphive/models/service_area_create_request.rb +455 -0
- data/lib/crisphive/models/service_area_create_response.rb +215 -0
- data/lib/crisphive/models/service_area_list.rb +2 -2
- data/lib/crisphive/models/service_area_update_request.rb +451 -0
- data/lib/crisphive/models/skill.rb +9 -2
- data/lib/crisphive/models/skill_by_category_list.rb +4 -2
- data/lib/crisphive/models/skill_category.rb +7 -2
- data/lib/crisphive/models/skill_category_create_request.rb +270 -0
- data/lib/crisphive/models/skill_category_create_response.rb +215 -0
- data/lib/crisphive/models/skill_category_list.rb +4 -2
- data/lib/crisphive/models/skill_create_request.rb +270 -0
- data/lib/crisphive/models/skill_create_response.rb +215 -0
- data/lib/crisphive/models/skill_list.rb +2 -2
- data/lib/crisphive/models/skill_summary.rb +2 -2
- data/lib/crisphive/models/skill_update_request.rb +281 -0
- data/lib/crisphive/models/technician.rb +66 -4
- data/lib/crisphive/models/technician_address.rb +2 -2
- data/lib/crisphive/models/technician_address_input.rb +408 -0
- data/lib/crisphive/models/technician_buddies_request.rb +236 -0
- data/lib/crisphive/models/technician_create_request.rb +603 -0
- data/lib/crisphive/models/technician_create_response.rb +215 -0
- data/lib/crisphive/models/technician_lead_ref.rb +2 -2
- data/lib/crisphive/models/technician_leads_request.rb +236 -0
- data/lib/crisphive/models/technician_list.rb +3 -3
- data/lib/crisphive/models/technician_schedule.rb +279 -0
- data/lib/crisphive/models/technician_schedule_block.rb +225 -0
- data/lib/crisphive/models/technician_schedule_session.rb +311 -0
- data/lib/crisphive/models/technician_service_area_ref.rb +2 -2
- data/lib/crisphive/models/technician_service_areas_request.rb +236 -0
- data/lib/crisphive/models/technician_service_areas_response.rb +217 -0
- data/lib/crisphive/models/technician_skill.rb +265 -0
- data/lib/crisphive/models/technician_skill_list.rb +227 -0
- data/lib/crisphive/models/technician_skills_request.rb +236 -0
- data/lib/crisphive/models/technician_status.rb +2 -2
- data/lib/crisphive/models/technician_time_off.rb +334 -0
- data/lib/crisphive/models/technician_time_off_create_request.rb +285 -0
- data/lib/crisphive/models/technician_time_off_create_response.rb +215 -0
- data/lib/crisphive/models/technician_time_off_list.rb +246 -0
- data/lib/crisphive/models/technician_update_request.rb +507 -0
- data/lib/crisphive/models/technician_vehicles_request.rb +236 -0
- data/lib/crisphive/models/vehicle.rb +26 -4
- data/lib/crisphive/models/vehicle_create_request.rb +420 -0
- data/lib/crisphive/models/vehicle_create_response.rb +215 -0
- data/lib/crisphive/models/vehicle_list.rb +2 -2
- data/lib/crisphive/models/vehicle_owner.rb +2 -2
- data/lib/crisphive/models/vehicle_update_request.rb +440 -0
- data/lib/crisphive/models/webhook_create_request.rb +320 -0
- data/lib/crisphive/models/webhook_create_response.rb +391 -0
- data/lib/crisphive/models/webhook_verification.rb +235 -0
- data/lib/crisphive/version.rb +3 -3
- data/lib/crisphive.rb +126 -2
- data/spec/spec_helper.rb +2 -2
- metadata +129 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
=begin
|
|
2
|
-
#
|
|
2
|
+
#Crisphive Developer API
|
|
3
3
|
|
|
4
|
-
#Public REST API for integrating
|
|
4
|
+
#Public REST API for integrating Crisphive from your own backend. Authenticate every request with a secret API key as a Bearer token (`Authorization: Bearer chsk_live_…`). The key prefix selects the data environment: `chsk_live_…` → production (live), `chsk_test_…` → sandbox (isolated test). **Key scopes (restricted keys).** A key is either *full-access* (can call every endpoint below) or *restricted* to a set of permission codes chosen at creation — the same codes as the dashboard permission grid (e.g. `customers_view`, `job_create`, `team_manage`). A restricted key calling an endpoint outside its scope gets `403`. The full code list is the permission catalog (`GET /permission/modules` on the dashboard API). Create, scope, and revoke keys from the business dashboard. Every response is wrapped in the envelope `{ \"error_code\": 0, \"message\": \"Success\", \"data\": <payload> }`.
|
|
5
5
|
|
|
6
6
|
The version of the OpenAPI document: 1.0
|
|
7
7
|
|
|
@@ -19,8 +19,142 @@ module Crisphive
|
|
|
19
19
|
def initialize(api_client = ApiClient.default)
|
|
20
20
|
@api_client = api_client
|
|
21
21
|
end
|
|
22
|
+
# Add a technician
|
|
23
|
+
# Creates a technician membership under the current business. If the phone/email matches an existing user, their account is linked. Otherwise a new user identity is created. Either way the membership starts active. The new member is notified (live mode only, best-effort): an email when `email` is supplied, an SMS when `phone` is supplied, both when both — informational only, no activation step (login stays passwordless: magic link / OTP). Re-adding someone: if the person is currently SUSPENDED on this business (a dashboard action — not reachable via this API), the create REACTIVATES that existing membership (same technician id, their existing group; also notified). A technician REMOVED with deleteTechnician is a closed membership: re-adding the same email/phone links the SAME underlying person (no duplicate identity) but creates a FRESH membership with a NEW id — history stays under the old one. Owner/Administrator groups cannot be assigned via API key, and not at all in sandbox mode. `assignment_tier` (what the scheduler assigns jobs by) is ignored — stored empty, no error — for the Booking Coordinator, Administrator and Viewer roles, which are never assigned jobs; a reactivated member of those roles also comes back without a tier. Optional relations (all validated; any missing id → 404 TECHNICIAN_NOT_FOUND with `missing_ids`): `buddy_ids` sets this technician's buddy list (use when creating a lead); `lead_ids` adds this technician as a buddy of each named lead (use when creating a buddy — the buddy-side way to attach the same lead↔buddy relation); `service_area_ids` assigns the technician to those service areas. `start_location_type=office` snapshots the business address + coordinates into the technician at create time; `address`, `start_location_lat`, `start_location_long` in the body are ignored. Requires the business to have coordinates set (else 400 BUSINESS_LOCATION_MISSING). `start_location_type=home` (or empty) uses the address + coordinates from the body.
|
|
24
|
+
# @param technician_create_request [TechnicianCreateRequest] Technician details
|
|
25
|
+
# @param [Hash] opts the optional parameters
|
|
26
|
+
# @option opts [String] :idempotency_key Unique key making retries safe: a repeat send with the same key replays the original response (header Idempotent-Replayed: true) instead of re-running the operation. Reusing a key with a different body returns 422 IDEMPOTENCY_KEY_REUSE.
|
|
27
|
+
# @return [CreateTechnician200Response]
|
|
28
|
+
def create_technician(technician_create_request, opts = {})
|
|
29
|
+
data, _status_code, _headers = create_technician_with_http_info(technician_create_request, opts)
|
|
30
|
+
data
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Add a technician
|
|
34
|
+
# Creates a technician membership under the current business. If the phone/email matches an existing user, their account is linked. Otherwise a new user identity is created. Either way the membership starts active. The new member is notified (live mode only, best-effort): an email when `email` is supplied, an SMS when `phone` is supplied, both when both — informational only, no activation step (login stays passwordless: magic link / OTP). Re-adding someone: if the person is currently SUSPENDED on this business (a dashboard action — not reachable via this API), the create REACTIVATES that existing membership (same technician id, their existing group; also notified). A technician REMOVED with deleteTechnician is a closed membership: re-adding the same email/phone links the SAME underlying person (no duplicate identity) but creates a FRESH membership with a NEW id — history stays under the old one. Owner/Administrator groups cannot be assigned via API key, and not at all in sandbox mode. `assignment_tier` (what the scheduler assigns jobs by) is ignored — stored empty, no error — for the Booking Coordinator, Administrator and Viewer roles, which are never assigned jobs; a reactivated member of those roles also comes back without a tier. Optional relations (all validated; any missing id → 404 TECHNICIAN_NOT_FOUND with `missing_ids`): `buddy_ids` sets this technician's buddy list (use when creating a lead); `lead_ids` adds this technician as a buddy of each named lead (use when creating a buddy — the buddy-side way to attach the same lead↔buddy relation); `service_area_ids` assigns the technician to those service areas. `start_location_type=office` snapshots the business address + coordinates into the technician at create time; `address`, `start_location_lat`, `start_location_long` in the body are ignored. Requires the business to have coordinates set (else 400 BUSINESS_LOCATION_MISSING). `start_location_type=home` (or empty) uses the address + coordinates from the body.
|
|
35
|
+
# @param technician_create_request [TechnicianCreateRequest] Technician details
|
|
36
|
+
# @param [Hash] opts the optional parameters
|
|
37
|
+
# @option opts [String] :idempotency_key Unique key making retries safe: a repeat send with the same key replays the original response (header Idempotent-Replayed: true) instead of re-running the operation. Reusing a key with a different body returns 422 IDEMPOTENCY_KEY_REUSE.
|
|
38
|
+
# @return [Array<(CreateTechnician200Response, Integer, Hash)>] CreateTechnician200Response data, response status code and response headers
|
|
39
|
+
def create_technician_with_http_info(technician_create_request, opts = {})
|
|
40
|
+
if @api_client.config.debugging
|
|
41
|
+
@api_client.config.logger.debug 'Calling API: TechnicianApi.create_technician ...'
|
|
42
|
+
end
|
|
43
|
+
# verify the required parameter 'technician_create_request' is set
|
|
44
|
+
if @api_client.config.client_side_validation && technician_create_request.nil?
|
|
45
|
+
fail ArgumentError, "Missing the required parameter 'technician_create_request' when calling TechnicianApi.create_technician"
|
|
46
|
+
end
|
|
47
|
+
# resource path
|
|
48
|
+
local_var_path = '/technicians'
|
|
49
|
+
|
|
50
|
+
# query parameters
|
|
51
|
+
query_params = opts[:query_params] || {}
|
|
52
|
+
|
|
53
|
+
# header parameters
|
|
54
|
+
header_params = opts[:header_params] || {}
|
|
55
|
+
# HTTP header 'Accept' (if needed)
|
|
56
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
57
|
+
# HTTP header 'Content-Type'
|
|
58
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
59
|
+
if !content_type.nil?
|
|
60
|
+
header_params['Content-Type'] = content_type
|
|
61
|
+
end
|
|
62
|
+
header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
|
|
63
|
+
|
|
64
|
+
# form parameters
|
|
65
|
+
form_params = opts[:form_params] || {}
|
|
66
|
+
|
|
67
|
+
# http body (model)
|
|
68
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(technician_create_request)
|
|
69
|
+
|
|
70
|
+
# return_type
|
|
71
|
+
return_type = opts[:debug_return_type] || 'CreateTechnician200Response'
|
|
72
|
+
|
|
73
|
+
# auth_names
|
|
74
|
+
auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
|
|
75
|
+
|
|
76
|
+
new_options = opts.merge(
|
|
77
|
+
:operation => :"TechnicianApi.create_technician",
|
|
78
|
+
:header_params => header_params,
|
|
79
|
+
:query_params => query_params,
|
|
80
|
+
:form_params => form_params,
|
|
81
|
+
:body => post_body,
|
|
82
|
+
:auth_names => auth_names,
|
|
83
|
+
:return_type => return_type
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
|
|
87
|
+
if @api_client.config.debugging
|
|
88
|
+
@api_client.config.logger.debug "API called: TechnicianApi#create_technician\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
89
|
+
end
|
|
90
|
+
return data, status_code, headers
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Remove a technician from the business
|
|
94
|
+
# Closes the technician's membership: the profile is set to deactive and soft-deleted, and their access to this business ends on their next request. In the same operation they are removed from every other technician's buddy list, vehicles they own are released, and any personal-calendar connection they made for this business is revoked. Fires the technician.deleted webhook. Their underlying user identity is untouched, and so are memberships at other businesses. Removal is REFUSED while the member is still staffed on an open job, as the lead or through a crew session, where open means not completed, not archived and not deleted (409 TECHNICIAN_HAS_OPEN_JOBS; nothing is written). data.open_job_count is the exact count and is always present. data.jobs lists up to 20 of them (id, short_code, current_status_key, scheduled_at when confirmed) ONLY when the caller also holds job_manage (a credential that may manage the team but not the job board gets the count alone; the key is then absent). Re-staff them first: reassign each with listCrewCandidates, re-plan whole days with previewAbsenceResolve / commitAbsenceResolve (which needs a time-off record covering those days; create one with createTechnicianTimeOff), or, from the dashboard, complete or archive the job. To cut someone's access immediately while their work is re-staffed, suspend them from the dashboard: suspension is not gated. This is a closed membership, not a pause. Re-adding the same email or phone later with createTechnician links the SAME person but opens a FRESH membership with a NEW technician id and none of the old buddy, vehicle or area links. If you expect the person back, suspend them from the dashboard instead; a suspended member is reactivated in place by createTechnician, keeping their id and group. The last active Owner cannot be removed (TECHNICIAN_LAST_OWNER). API keys the person created are NOT revoked (an HR action must not take an integration down); if any are still active, the business Owners and Administrators are emailed a list of them.
|
|
95
|
+
# @param id [String] Technician ID
|
|
96
|
+
# @param [Hash] opts the optional parameters
|
|
97
|
+
# @return [ResponseEnvelope]
|
|
98
|
+
def delete_technician(id, opts = {})
|
|
99
|
+
data, _status_code, _headers = delete_technician_with_http_info(id, opts)
|
|
100
|
+
data
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Remove a technician from the business
|
|
104
|
+
# Closes the technician's membership: the profile is set to deactive and soft-deleted, and their access to this business ends on their next request. In the same operation they are removed from every other technician's buddy list, vehicles they own are released, and any personal-calendar connection they made for this business is revoked. Fires the technician.deleted webhook. Their underlying user identity is untouched, and so are memberships at other businesses. Removal is REFUSED while the member is still staffed on an open job, as the lead or through a crew session, where open means not completed, not archived and not deleted (409 TECHNICIAN_HAS_OPEN_JOBS; nothing is written). data.open_job_count is the exact count and is always present. data.jobs lists up to 20 of them (id, short_code, current_status_key, scheduled_at when confirmed) ONLY when the caller also holds job_manage (a credential that may manage the team but not the job board gets the count alone; the key is then absent). Re-staff them first: reassign each with listCrewCandidates, re-plan whole days with previewAbsenceResolve / commitAbsenceResolve (which needs a time-off record covering those days; create one with createTechnicianTimeOff), or, from the dashboard, complete or archive the job. To cut someone's access immediately while their work is re-staffed, suspend them from the dashboard: suspension is not gated. This is a closed membership, not a pause. Re-adding the same email or phone later with createTechnician links the SAME person but opens a FRESH membership with a NEW technician id and none of the old buddy, vehicle or area links. If you expect the person back, suspend them from the dashboard instead; a suspended member is reactivated in place by createTechnician, keeping their id and group. The last active Owner cannot be removed (TECHNICIAN_LAST_OWNER). API keys the person created are NOT revoked (an HR action must not take an integration down); if any are still active, the business Owners and Administrators are emailed a list of them.
|
|
105
|
+
# @param id [String] Technician ID
|
|
106
|
+
# @param [Hash] opts the optional parameters
|
|
107
|
+
# @return [Array<(ResponseEnvelope, Integer, Hash)>] ResponseEnvelope data, response status code and response headers
|
|
108
|
+
def delete_technician_with_http_info(id, opts = {})
|
|
109
|
+
if @api_client.config.debugging
|
|
110
|
+
@api_client.config.logger.debug 'Calling API: TechnicianApi.delete_technician ...'
|
|
111
|
+
end
|
|
112
|
+
# verify the required parameter 'id' is set
|
|
113
|
+
if @api_client.config.client_side_validation && id.nil?
|
|
114
|
+
fail ArgumentError, "Missing the required parameter 'id' when calling TechnicianApi.delete_technician"
|
|
115
|
+
end
|
|
116
|
+
# resource path
|
|
117
|
+
local_var_path = '/technicians/{id}'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
|
|
118
|
+
|
|
119
|
+
# query parameters
|
|
120
|
+
query_params = opts[:query_params] || {}
|
|
121
|
+
|
|
122
|
+
# header parameters
|
|
123
|
+
header_params = opts[:header_params] || {}
|
|
124
|
+
# HTTP header 'Accept' (if needed)
|
|
125
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
126
|
+
|
|
127
|
+
# form parameters
|
|
128
|
+
form_params = opts[:form_params] || {}
|
|
129
|
+
|
|
130
|
+
# http body (model)
|
|
131
|
+
post_body = opts[:debug_body]
|
|
132
|
+
|
|
133
|
+
# return_type
|
|
134
|
+
return_type = opts[:debug_return_type] || 'ResponseEnvelope'
|
|
135
|
+
|
|
136
|
+
# auth_names
|
|
137
|
+
auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
|
|
138
|
+
|
|
139
|
+
new_options = opts.merge(
|
|
140
|
+
:operation => :"TechnicianApi.delete_technician",
|
|
141
|
+
:header_params => header_params,
|
|
142
|
+
:query_params => query_params,
|
|
143
|
+
:form_params => form_params,
|
|
144
|
+
:body => post_body,
|
|
145
|
+
:auth_names => auth_names,
|
|
146
|
+
:return_type => return_type
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
|
|
150
|
+
if @api_client.config.debugging
|
|
151
|
+
@api_client.config.logger.debug "API called: TechnicianApi#delete_technician\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
152
|
+
end
|
|
153
|
+
return data, status_code, headers
|
|
154
|
+
end
|
|
155
|
+
|
|
22
156
|
# Get a technician
|
|
23
|
-
# Returns
|
|
157
|
+
# Returns one technician's full profile: contact info, employment status, assignment tier, skills/qualifications, buddy (crew) relations and assigned vehicles — the dispatch-ready view of a field worker.
|
|
24
158
|
# @param id [String] Technician ID
|
|
25
159
|
# @param [Hash] opts the optional parameters
|
|
26
160
|
# @return [GetTechnician200Response]
|
|
@@ -30,7 +164,7 @@ module Crisphive
|
|
|
30
164
|
end
|
|
31
165
|
|
|
32
166
|
# Get a technician
|
|
33
|
-
# Returns
|
|
167
|
+
# Returns one technician's full profile: contact info, employment status, assignment tier, skills/qualifications, buddy (crew) relations and assigned vehicles — the dispatch-ready view of a field worker.
|
|
34
168
|
# @param id [String] Technician ID
|
|
35
169
|
# @param [Hash] opts the optional parameters
|
|
36
170
|
# @return [Array<(GetTechnician200Response, Integer, Hash)>] GetTechnician200Response data, response status code and response headers
|
|
@@ -83,7 +217,7 @@ module Crisphive
|
|
|
83
217
|
end
|
|
84
218
|
|
|
85
219
|
# List technicians
|
|
86
|
-
# Returns
|
|
220
|
+
# Returns the field workforce roster: paginated technicians (field workers / engineers) with status, assignment tier (lead, buddy, float), skills and crew relations — the people the dispatch engine schedules onto jobs. Discover the `preferred_technician_id` accepted on customer records here. Supports the `since` cursor for incremental workforce sync.
|
|
87
221
|
# @param [Hash] opts the optional parameters
|
|
88
222
|
# @option opts [Integer] :page Page number (default 1)
|
|
89
223
|
# @option opts [Integer] :limit Items per page (default 15, max 1000)
|
|
@@ -99,7 +233,7 @@ module Crisphive
|
|
|
99
233
|
end
|
|
100
234
|
|
|
101
235
|
# List technicians
|
|
102
|
-
# Returns
|
|
236
|
+
# Returns the field workforce roster: paginated technicians (field workers / engineers) with status, assignment tier (lead, buddy, float), skills and crew relations — the people the dispatch engine schedules onto jobs. Discover the `preferred_technician_id` accepted on customer records here. Supports the `since` cursor for incremental workforce sync.
|
|
103
237
|
# @param [Hash] opts the optional parameters
|
|
104
238
|
# @option opts [Integer] :page Page number (default 1)
|
|
105
239
|
# @option opts [Integer] :limit Items per page (default 15, max 1000)
|
|
@@ -159,5 +293,375 @@ module Crisphive
|
|
|
159
293
|
end
|
|
160
294
|
return data, status_code, headers
|
|
161
295
|
end
|
|
296
|
+
|
|
297
|
+
# Replace a technician's buddies
|
|
298
|
+
# Overwrites the technician's buddy list with the provided set of technician IDs. Sending an empty list clears all buddies. Each buddy ID must be an active technician of the same business; a technician cannot be their own buddy.
|
|
299
|
+
# @param id [String] Technician ID
|
|
300
|
+
# @param technician_buddies_request [TechnicianBuddiesRequest] Buddy IDs
|
|
301
|
+
# @param [Hash] opts the optional parameters
|
|
302
|
+
# @return [ResponseEnvelope]
|
|
303
|
+
def replace_technician_buddies(id, technician_buddies_request, opts = {})
|
|
304
|
+
data, _status_code, _headers = replace_technician_buddies_with_http_info(id, technician_buddies_request, opts)
|
|
305
|
+
data
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
# Replace a technician's buddies
|
|
309
|
+
# Overwrites the technician's buddy list with the provided set of technician IDs. Sending an empty list clears all buddies. Each buddy ID must be an active technician of the same business; a technician cannot be their own buddy.
|
|
310
|
+
# @param id [String] Technician ID
|
|
311
|
+
# @param technician_buddies_request [TechnicianBuddiesRequest] Buddy IDs
|
|
312
|
+
# @param [Hash] opts the optional parameters
|
|
313
|
+
# @return [Array<(ResponseEnvelope, Integer, Hash)>] ResponseEnvelope data, response status code and response headers
|
|
314
|
+
def replace_technician_buddies_with_http_info(id, technician_buddies_request, opts = {})
|
|
315
|
+
if @api_client.config.debugging
|
|
316
|
+
@api_client.config.logger.debug 'Calling API: TechnicianApi.replace_technician_buddies ...'
|
|
317
|
+
end
|
|
318
|
+
# verify the required parameter 'id' is set
|
|
319
|
+
if @api_client.config.client_side_validation && id.nil?
|
|
320
|
+
fail ArgumentError, "Missing the required parameter 'id' when calling TechnicianApi.replace_technician_buddies"
|
|
321
|
+
end
|
|
322
|
+
# verify the required parameter 'technician_buddies_request' is set
|
|
323
|
+
if @api_client.config.client_side_validation && technician_buddies_request.nil?
|
|
324
|
+
fail ArgumentError, "Missing the required parameter 'technician_buddies_request' when calling TechnicianApi.replace_technician_buddies"
|
|
325
|
+
end
|
|
326
|
+
# resource path
|
|
327
|
+
local_var_path = '/technicians/{id}/buddies'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
|
|
328
|
+
|
|
329
|
+
# query parameters
|
|
330
|
+
query_params = opts[:query_params] || {}
|
|
331
|
+
|
|
332
|
+
# header parameters
|
|
333
|
+
header_params = opts[:header_params] || {}
|
|
334
|
+
# HTTP header 'Accept' (if needed)
|
|
335
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
336
|
+
# HTTP header 'Content-Type'
|
|
337
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
338
|
+
if !content_type.nil?
|
|
339
|
+
header_params['Content-Type'] = content_type
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
# form parameters
|
|
343
|
+
form_params = opts[:form_params] || {}
|
|
344
|
+
|
|
345
|
+
# http body (model)
|
|
346
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(technician_buddies_request)
|
|
347
|
+
|
|
348
|
+
# return_type
|
|
349
|
+
return_type = opts[:debug_return_type] || 'ResponseEnvelope'
|
|
350
|
+
|
|
351
|
+
# auth_names
|
|
352
|
+
auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
|
|
353
|
+
|
|
354
|
+
new_options = opts.merge(
|
|
355
|
+
:operation => :"TechnicianApi.replace_technician_buddies",
|
|
356
|
+
:header_params => header_params,
|
|
357
|
+
:query_params => query_params,
|
|
358
|
+
:form_params => form_params,
|
|
359
|
+
:body => post_body,
|
|
360
|
+
:auth_names => auth_names,
|
|
361
|
+
:return_type => return_type
|
|
362
|
+
)
|
|
363
|
+
|
|
364
|
+
data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options)
|
|
365
|
+
if @api_client.config.debugging
|
|
366
|
+
@api_client.config.logger.debug "API called: TechnicianApi#replace_technician_buddies\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
367
|
+
end
|
|
368
|
+
return data, status_code, headers
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
# Replace a buddy's leaders (buddy side)
|
|
372
|
+
# Sets the full set of leads this buddy belongs to (many-to-many favorites). Replace-semantics — lead_ids is the complete new list; [] clears every leader. Managed by business staff.
|
|
373
|
+
# @param id [String] Buddy technician ID
|
|
374
|
+
# @param technician_leads_request [TechnicianLeadsRequest] Lead IDs payload
|
|
375
|
+
# @param [Hash] opts the optional parameters
|
|
376
|
+
# @return [ResponseEnvelope]
|
|
377
|
+
def replace_technician_leads(id, technician_leads_request, opts = {})
|
|
378
|
+
data, _status_code, _headers = replace_technician_leads_with_http_info(id, technician_leads_request, opts)
|
|
379
|
+
data
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
# Replace a buddy's leaders (buddy side)
|
|
383
|
+
# Sets the full set of leads this buddy belongs to (many-to-many favorites). Replace-semantics — lead_ids is the complete new list; [] clears every leader. Managed by business staff.
|
|
384
|
+
# @param id [String] Buddy technician ID
|
|
385
|
+
# @param technician_leads_request [TechnicianLeadsRequest] Lead IDs payload
|
|
386
|
+
# @param [Hash] opts the optional parameters
|
|
387
|
+
# @return [Array<(ResponseEnvelope, Integer, Hash)>] ResponseEnvelope data, response status code and response headers
|
|
388
|
+
def replace_technician_leads_with_http_info(id, technician_leads_request, opts = {})
|
|
389
|
+
if @api_client.config.debugging
|
|
390
|
+
@api_client.config.logger.debug 'Calling API: TechnicianApi.replace_technician_leads ...'
|
|
391
|
+
end
|
|
392
|
+
# verify the required parameter 'id' is set
|
|
393
|
+
if @api_client.config.client_side_validation && id.nil?
|
|
394
|
+
fail ArgumentError, "Missing the required parameter 'id' when calling TechnicianApi.replace_technician_leads"
|
|
395
|
+
end
|
|
396
|
+
# verify the required parameter 'technician_leads_request' is set
|
|
397
|
+
if @api_client.config.client_side_validation && technician_leads_request.nil?
|
|
398
|
+
fail ArgumentError, "Missing the required parameter 'technician_leads_request' when calling TechnicianApi.replace_technician_leads"
|
|
399
|
+
end
|
|
400
|
+
# resource path
|
|
401
|
+
local_var_path = '/technicians/{id}/leads'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
|
|
402
|
+
|
|
403
|
+
# query parameters
|
|
404
|
+
query_params = opts[:query_params] || {}
|
|
405
|
+
|
|
406
|
+
# header parameters
|
|
407
|
+
header_params = opts[:header_params] || {}
|
|
408
|
+
# HTTP header 'Accept' (if needed)
|
|
409
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
410
|
+
# HTTP header 'Content-Type'
|
|
411
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
412
|
+
if !content_type.nil?
|
|
413
|
+
header_params['Content-Type'] = content_type
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
# form parameters
|
|
417
|
+
form_params = opts[:form_params] || {}
|
|
418
|
+
|
|
419
|
+
# http body (model)
|
|
420
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(technician_leads_request)
|
|
421
|
+
|
|
422
|
+
# return_type
|
|
423
|
+
return_type = opts[:debug_return_type] || 'ResponseEnvelope'
|
|
424
|
+
|
|
425
|
+
# auth_names
|
|
426
|
+
auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
|
|
427
|
+
|
|
428
|
+
new_options = opts.merge(
|
|
429
|
+
:operation => :"TechnicianApi.replace_technician_leads",
|
|
430
|
+
:header_params => header_params,
|
|
431
|
+
:query_params => query_params,
|
|
432
|
+
:form_params => form_params,
|
|
433
|
+
:body => post_body,
|
|
434
|
+
:auth_names => auth_names,
|
|
435
|
+
:return_type => return_type
|
|
436
|
+
)
|
|
437
|
+
|
|
438
|
+
data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options)
|
|
439
|
+
if @api_client.config.debugging
|
|
440
|
+
@api_client.config.logger.debug "API called: TechnicianApi#replace_technician_leads\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
441
|
+
end
|
|
442
|
+
return data, status_code, headers
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
# Replace a technician's service areas
|
|
446
|
+
# Overwrites the technician's service-area assignments with the provided set of service area IDs. Sending an empty list clears all. Each service area ID must belong to the same business — any missing id → 404 SERVICE_AREA_NOT_FOUND with `missing_ids` and no writes. The resolved set is returned and also embedded as `service_areas` in the technician GET/list response. Managed by business staff (Booking Coordinator), not tech self-service.
|
|
447
|
+
# @param id [String] Technician ID
|
|
448
|
+
# @param technician_service_areas_request [TechnicianServiceAreasRequest] Service area IDs
|
|
449
|
+
# @param [Hash] opts the optional parameters
|
|
450
|
+
# @return [ReplaceTechnicianServiceAreas200Response]
|
|
451
|
+
def replace_technician_service_areas(id, technician_service_areas_request, opts = {})
|
|
452
|
+
data, _status_code, _headers = replace_technician_service_areas_with_http_info(id, technician_service_areas_request, opts)
|
|
453
|
+
data
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
# Replace a technician's service areas
|
|
457
|
+
# Overwrites the technician's service-area assignments with the provided set of service area IDs. Sending an empty list clears all. Each service area ID must belong to the same business — any missing id → 404 SERVICE_AREA_NOT_FOUND with `missing_ids` and no writes. The resolved set is returned and also embedded as `service_areas` in the technician GET/list response. Managed by business staff (Booking Coordinator), not tech self-service.
|
|
458
|
+
# @param id [String] Technician ID
|
|
459
|
+
# @param technician_service_areas_request [TechnicianServiceAreasRequest] Service area IDs
|
|
460
|
+
# @param [Hash] opts the optional parameters
|
|
461
|
+
# @return [Array<(ReplaceTechnicianServiceAreas200Response, Integer, Hash)>] ReplaceTechnicianServiceAreas200Response data, response status code and response headers
|
|
462
|
+
def replace_technician_service_areas_with_http_info(id, technician_service_areas_request, opts = {})
|
|
463
|
+
if @api_client.config.debugging
|
|
464
|
+
@api_client.config.logger.debug 'Calling API: TechnicianApi.replace_technician_service_areas ...'
|
|
465
|
+
end
|
|
466
|
+
# verify the required parameter 'id' is set
|
|
467
|
+
if @api_client.config.client_side_validation && id.nil?
|
|
468
|
+
fail ArgumentError, "Missing the required parameter 'id' when calling TechnicianApi.replace_technician_service_areas"
|
|
469
|
+
end
|
|
470
|
+
# verify the required parameter 'technician_service_areas_request' is set
|
|
471
|
+
if @api_client.config.client_side_validation && technician_service_areas_request.nil?
|
|
472
|
+
fail ArgumentError, "Missing the required parameter 'technician_service_areas_request' when calling TechnicianApi.replace_technician_service_areas"
|
|
473
|
+
end
|
|
474
|
+
# resource path
|
|
475
|
+
local_var_path = '/technicians/{id}/service-areas'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
|
|
476
|
+
|
|
477
|
+
# query parameters
|
|
478
|
+
query_params = opts[:query_params] || {}
|
|
479
|
+
|
|
480
|
+
# header parameters
|
|
481
|
+
header_params = opts[:header_params] || {}
|
|
482
|
+
# HTTP header 'Accept' (if needed)
|
|
483
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
484
|
+
# HTTP header 'Content-Type'
|
|
485
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
486
|
+
if !content_type.nil?
|
|
487
|
+
header_params['Content-Type'] = content_type
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
# form parameters
|
|
491
|
+
form_params = opts[:form_params] || {}
|
|
492
|
+
|
|
493
|
+
# http body (model)
|
|
494
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(technician_service_areas_request)
|
|
495
|
+
|
|
496
|
+
# return_type
|
|
497
|
+
return_type = opts[:debug_return_type] || 'ReplaceTechnicianServiceAreas200Response'
|
|
498
|
+
|
|
499
|
+
# auth_names
|
|
500
|
+
auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
|
|
501
|
+
|
|
502
|
+
new_options = opts.merge(
|
|
503
|
+
:operation => :"TechnicianApi.replace_technician_service_areas",
|
|
504
|
+
:header_params => header_params,
|
|
505
|
+
:query_params => query_params,
|
|
506
|
+
:form_params => form_params,
|
|
507
|
+
:body => post_body,
|
|
508
|
+
:auth_names => auth_names,
|
|
509
|
+
:return_type => return_type
|
|
510
|
+
)
|
|
511
|
+
|
|
512
|
+
data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options)
|
|
513
|
+
if @api_client.config.debugging
|
|
514
|
+
@api_client.config.logger.debug "API called: TechnicianApi#replace_technician_service_areas\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
515
|
+
end
|
|
516
|
+
return data, status_code, headers
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
# Replace a technician's vehicles
|
|
520
|
+
# Overwrites the technician's vehicle list with the provided set of vehicle IDs (the vehicles this technician uses). Sending an empty list clears all. Each vehicle ID must belong to the same business. The list is also embedded as `vehicle_ids` in the technician GET/list response.
|
|
521
|
+
# @param id [String] Technician ID
|
|
522
|
+
# @param technician_vehicles_request [TechnicianVehiclesRequest] Vehicle IDs
|
|
523
|
+
# @param [Hash] opts the optional parameters
|
|
524
|
+
# @return [ResponseEnvelope]
|
|
525
|
+
def replace_technician_vehicles(id, technician_vehicles_request, opts = {})
|
|
526
|
+
data, _status_code, _headers = replace_technician_vehicles_with_http_info(id, technician_vehicles_request, opts)
|
|
527
|
+
data
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
# Replace a technician's vehicles
|
|
531
|
+
# Overwrites the technician's vehicle list with the provided set of vehicle IDs (the vehicles this technician uses). Sending an empty list clears all. Each vehicle ID must belong to the same business. The list is also embedded as `vehicle_ids` in the technician GET/list response.
|
|
532
|
+
# @param id [String] Technician ID
|
|
533
|
+
# @param technician_vehicles_request [TechnicianVehiclesRequest] Vehicle IDs
|
|
534
|
+
# @param [Hash] opts the optional parameters
|
|
535
|
+
# @return [Array<(ResponseEnvelope, Integer, Hash)>] ResponseEnvelope data, response status code and response headers
|
|
536
|
+
def replace_technician_vehicles_with_http_info(id, technician_vehicles_request, opts = {})
|
|
537
|
+
if @api_client.config.debugging
|
|
538
|
+
@api_client.config.logger.debug 'Calling API: TechnicianApi.replace_technician_vehicles ...'
|
|
539
|
+
end
|
|
540
|
+
# verify the required parameter 'id' is set
|
|
541
|
+
if @api_client.config.client_side_validation && id.nil?
|
|
542
|
+
fail ArgumentError, "Missing the required parameter 'id' when calling TechnicianApi.replace_technician_vehicles"
|
|
543
|
+
end
|
|
544
|
+
# verify the required parameter 'technician_vehicles_request' is set
|
|
545
|
+
if @api_client.config.client_side_validation && technician_vehicles_request.nil?
|
|
546
|
+
fail ArgumentError, "Missing the required parameter 'technician_vehicles_request' when calling TechnicianApi.replace_technician_vehicles"
|
|
547
|
+
end
|
|
548
|
+
# resource path
|
|
549
|
+
local_var_path = '/technicians/{id}/vehicles'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
|
|
550
|
+
|
|
551
|
+
# query parameters
|
|
552
|
+
query_params = opts[:query_params] || {}
|
|
553
|
+
|
|
554
|
+
# header parameters
|
|
555
|
+
header_params = opts[:header_params] || {}
|
|
556
|
+
# HTTP header 'Accept' (if needed)
|
|
557
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
558
|
+
# HTTP header 'Content-Type'
|
|
559
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
560
|
+
if !content_type.nil?
|
|
561
|
+
header_params['Content-Type'] = content_type
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
# form parameters
|
|
565
|
+
form_params = opts[:form_params] || {}
|
|
566
|
+
|
|
567
|
+
# http body (model)
|
|
568
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(technician_vehicles_request)
|
|
569
|
+
|
|
570
|
+
# return_type
|
|
571
|
+
return_type = opts[:debug_return_type] || 'ResponseEnvelope'
|
|
572
|
+
|
|
573
|
+
# auth_names
|
|
574
|
+
auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
|
|
575
|
+
|
|
576
|
+
new_options = opts.merge(
|
|
577
|
+
:operation => :"TechnicianApi.replace_technician_vehicles",
|
|
578
|
+
:header_params => header_params,
|
|
579
|
+
:query_params => query_params,
|
|
580
|
+
:form_params => form_params,
|
|
581
|
+
:body => post_body,
|
|
582
|
+
:auth_names => auth_names,
|
|
583
|
+
:return_type => return_type
|
|
584
|
+
)
|
|
585
|
+
|
|
586
|
+
data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options)
|
|
587
|
+
if @api_client.config.debugging
|
|
588
|
+
@api_client.config.logger.debug "API called: TechnicianApi#replace_technician_vehicles\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
589
|
+
end
|
|
590
|
+
return data, status_code, headers
|
|
591
|
+
end
|
|
592
|
+
|
|
593
|
+
# Update a technician
|
|
594
|
+
# Updates mutable technician profile fields. `assignment_tier` is ignored (stored empty, no error) for the Booking Coordinator, Administrator and Viewer roles, so moving a member into one of them clears the tier and frees their technician seat. `start_location_type=office` re-snapshots the current business address + coordinates (body `address`/`start_location_lat`/`start_location_long` ignored; requires business coordinates, else 400 BUSINESS_LOCATION_MISSING). `start_location_type=home` (or empty) uses the address + coordinates from the body.
|
|
595
|
+
# @param id [String] Technician ID
|
|
596
|
+
# @param technician_update_request [TechnicianUpdateRequest] Technician details
|
|
597
|
+
# @param [Hash] opts the optional parameters
|
|
598
|
+
# @return [ResponseEnvelope]
|
|
599
|
+
def update_technician(id, technician_update_request, opts = {})
|
|
600
|
+
data, _status_code, _headers = update_technician_with_http_info(id, technician_update_request, opts)
|
|
601
|
+
data
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
# Update a technician
|
|
605
|
+
# Updates mutable technician profile fields. `assignment_tier` is ignored (stored empty, no error) for the Booking Coordinator, Administrator and Viewer roles, so moving a member into one of them clears the tier and frees their technician seat. `start_location_type=office` re-snapshots the current business address + coordinates (body `address`/`start_location_lat`/`start_location_long` ignored; requires business coordinates, else 400 BUSINESS_LOCATION_MISSING). `start_location_type=home` (or empty) uses the address + coordinates from the body.
|
|
606
|
+
# @param id [String] Technician ID
|
|
607
|
+
# @param technician_update_request [TechnicianUpdateRequest] Technician details
|
|
608
|
+
# @param [Hash] opts the optional parameters
|
|
609
|
+
# @return [Array<(ResponseEnvelope, Integer, Hash)>] ResponseEnvelope data, response status code and response headers
|
|
610
|
+
def update_technician_with_http_info(id, technician_update_request, opts = {})
|
|
611
|
+
if @api_client.config.debugging
|
|
612
|
+
@api_client.config.logger.debug 'Calling API: TechnicianApi.update_technician ...'
|
|
613
|
+
end
|
|
614
|
+
# verify the required parameter 'id' is set
|
|
615
|
+
if @api_client.config.client_side_validation && id.nil?
|
|
616
|
+
fail ArgumentError, "Missing the required parameter 'id' when calling TechnicianApi.update_technician"
|
|
617
|
+
end
|
|
618
|
+
# verify the required parameter 'technician_update_request' is set
|
|
619
|
+
if @api_client.config.client_side_validation && technician_update_request.nil?
|
|
620
|
+
fail ArgumentError, "Missing the required parameter 'technician_update_request' when calling TechnicianApi.update_technician"
|
|
621
|
+
end
|
|
622
|
+
# resource path
|
|
623
|
+
local_var_path = '/technicians/{id}'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
|
|
624
|
+
|
|
625
|
+
# query parameters
|
|
626
|
+
query_params = opts[:query_params] || {}
|
|
627
|
+
|
|
628
|
+
# header parameters
|
|
629
|
+
header_params = opts[:header_params] || {}
|
|
630
|
+
# HTTP header 'Accept' (if needed)
|
|
631
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
632
|
+
# HTTP header 'Content-Type'
|
|
633
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
634
|
+
if !content_type.nil?
|
|
635
|
+
header_params['Content-Type'] = content_type
|
|
636
|
+
end
|
|
637
|
+
|
|
638
|
+
# form parameters
|
|
639
|
+
form_params = opts[:form_params] || {}
|
|
640
|
+
|
|
641
|
+
# http body (model)
|
|
642
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(technician_update_request)
|
|
643
|
+
|
|
644
|
+
# return_type
|
|
645
|
+
return_type = opts[:debug_return_type] || 'ResponseEnvelope'
|
|
646
|
+
|
|
647
|
+
# auth_names
|
|
648
|
+
auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
|
|
649
|
+
|
|
650
|
+
new_options = opts.merge(
|
|
651
|
+
:operation => :"TechnicianApi.update_technician",
|
|
652
|
+
:header_params => header_params,
|
|
653
|
+
:query_params => query_params,
|
|
654
|
+
:form_params => form_params,
|
|
655
|
+
:body => post_body,
|
|
656
|
+
:auth_names => auth_names,
|
|
657
|
+
:return_type => return_type
|
|
658
|
+
)
|
|
659
|
+
|
|
660
|
+
data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options)
|
|
661
|
+
if @api_client.config.debugging
|
|
662
|
+
@api_client.config.logger.debug "API called: TechnicianApi#update_technician\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
663
|
+
end
|
|
664
|
+
return data, status_code, headers
|
|
665
|
+
end
|
|
162
666
|
end
|
|
163
667
|
end
|