public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var userId = fulfillmentRequest.GetCurrentUserId(); var visits = await jobberClient.GetTodayAssignedVisitsAsync(userId); switch (visits.Count) { case 0: return(BuildNoVisitResponse()); case 1: return(BuildVisitFoundResponse(visits.Visits.First())); default: return(buildMultipleVisitsFoundResponse(visits)); } }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var userId = fulfillmentRequest.GetCurrentUserId(); var current_time = DateTime.Now.ToUnixTime(); var visits = await jobberClient.GetTodayAssignedVisitsAsync(userId, current_time); if (visits.Count == 0) { return(FulfillmentResponseBuilder.Create() .Speech($"Your remaining day looks clear") .Build()); } return(FulfillmentResponseBuilder.Create() .Speech(BuildResponseFrom(visits.Visits.First())) .WithMessage(BuildGoogleCardFrom(visits.Visits.First())) .Build()); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var userId = fulfillmentRequest.GetCurrentUserId(); var visits = await jobberClient.GetTodayAssignedVisitsAsync(userId); float length = 0; float currentEnd = 0; foreach (Visit visit in visits.Visits) { // To handle overlap intervals length += Math.Max(0, visit.EndAt - Math.Max(currentEnd, visit.StartAt)); currentEnd = visit.EndAt; } float duration = (float)(length / 3600); int hours = (int)Math.Floor(duration); int minutes = (int)((duration - hours) * 60); StringBuilder sb = new StringBuilder(); if (hours == 0) { sb.Append($"You have no work today."); } else { if (hours >= 24) { sb.Append($"You have work all day."); } else { sb.Append($"Your work is {hours} hours and {minutes} minutes long today."); } } return(FulfillmentResponseBuilder.Create() .Speech(sb.ToString()) .Build()); }