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());
        }
Ejemplo n.º 3
0
        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());
        }