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);

            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 datePeriod = GetDatePeriodForRevenueFrom(fulfillmentRequest);
            var timeUnit   = fulfillmentRequest.GetParameter(Constants.Variables.TimeUnitOriginal);

            if (string.IsNullOrEmpty(timeUnit))
            {
                timeUnit = "last week";
            }

            var getTransactionRequest = new GetTransactionRequest
            {
                Start    = datePeriod.Start,
                End      = datePeriod.End,
                TimeUnit = timeUnit
            };

            var Transactions = await jobberClient.GetRangedTransactionsAsync(getTransactionRequest);

            decimal revenue = Transactions.GetTotal();

            if (timeUnit.EndsWith("?"))
            {
                timeUnit = timeUnit.Remove(timeUnit.Length - 1);
            }

            return(FulfillmentResponseBuilder.Create()
                   .Speech($"We made ${revenue.ToString("N")} {timeUnit}")
                   .Build());
        }
Esempio n. 4
0
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var invoices = await jobberClient.GetDraftInvoicesAsync();

            var numOfSendableInvoices = invoices.Count();

            switch (numOfSendableInvoices)
            {
            case 0:
                return(BuildNoSendableInvoicesFoundResponse());

            case 1:
                return(BuildSingleSendableInvoiceFoundResponse());

            default:
                return(BuildMultipleSendableInvoicesFoundResponse(numOfSendableInvoices));
            }
        }
Esempio n. 5
0
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var num = fulfillmentRequest.GetParameterAsInt("num");

            return(FulfillmentResponseBuilder.Create()
                   .Speech($"Your favorite number is {num}")
                   .Build());
        }
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var response = new FulfillmentResponse
            {
                Speech      = "Sorry, I'm not sure what you're asking for.",
                DisplayText = "Sorry, I'm not sure what you're asking for."
            };

            return(await Task.FromResult(response));
        }
Esempio n. 7
0
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var quotes = await jobberClient.GetQuotesAsync();

            var numOfConvertableQuotes = quotes.NumConvertable;

            switch (numOfConvertableQuotes)
            {
            case 0:
                return(BuildNoConvertableQuotesFoundResponse());

            case 1:
                return(BuildSingleConvertableQuotesFoundResponse(quotes.ConvertableQuotes.First()));

            default:
                return(BuildMultipleConvertableQuotesFoundResponse(numOfConvertableQuotes));
            }
        }
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var Visits = await jobberClient.GetTodaysVisitsAsync();

            var numOfUnassignedVisits = Visits.NumUnassigned;

            switch (numOfUnassignedVisits)
            {
            case 0:
                return(BuildZeroUnassignedVisitsFoundResponse(numOfUnassignedVisits));

            case 1:
                return(BuildSingleUnassignedVisitsFoundResponse(numOfUnassignedVisits));

            default:
                return(BuildMultipleUnassignedVisitsFoundResponse(numOfUnassignedVisits));
            }
        }
Esempio n. 9
0
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var todaysVisits = await jobberClient.GetTodaysVisitsAsync();

            switch (todaysVisits.NumCompletable)
            {
            case 1:
                return(BuildSingleVisitResponseFor(todaysVisits));

            default:
                return(BuildMultipleVisitsResponseFor(todaysVisits));
            }
        }
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var jobDateTimeRange     = GetDateTimeRangeForJobFrom(fulfillmentRequest);
            var createJobDescription = fulfillmentRequest.GetParameter(Constants.Variables.JobDescription);
            var createJobContext     = fulfillmentRequest.GetContextParameterAs <CreateJobContext>
                                           (Constants.Contexts.CreateJobClientSet, Constants.Variables.CreateJobContext);

            var createJobRequest = new CreateJobRequest
            {
                ClientId    = createJobContext.Client.Id,
                PropertyId  = createJobContext.Property.Id,
                StartAt     = jobDateTimeRange.Start.ToUnixTime(),
                EndAt       = jobDateTimeRange.End.ToUnixTime(),
                Description = createJobDescription
            };

            await jobberClient.CreateJobAsync(createJobRequest);

            return(FulfillmentResponseBuilder.Create()
                   .Speech(BuildResponseFrom(fulfillmentRequest))
                   .WithMessage(BuildGoogleCardFrom(createJobContext, createJobDescription))
                   .MarkEndOfAssistantConversation()
                   .Build());
        }
Esempio n. 11
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());
        }
Esempio n. 12
0
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var serviceName        = fulfillmentRequest.GetParameter(Constants.Variables.ServiceName);
            var newUnitPrice       = fulfillmentRequest.GetParameterAsDouble(Constants.Variables.Price);
            var modifyQuoteContext = fulfillmentRequest.GetContextParameterAs <ModifyQuoteContext>(
                Constants.Contexts.QuoteDetailsSet, Constants.Variables.ModifyQuoteContext);

            var modifiedQuote = UpdateServicePriceInQuote(modifyQuoteContext.Quote, serviceName, newUnitPrice);

            await jobberClient.UpdateQuoteAsync(modifiedQuote);

            return(FulfillmentResponseBuilder.Create()
                   .Speech("Okay. I've updated the quote for you.")
                   .Build());
        }
Esempio n. 13
0
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var quoteNumber     = fulfillmentRequest.GetParameterAsInt(Constants.Variables.QuoteNumber);
            var quoteCollection = await jobberClient.GetQuotesAsync();

            var filteredQuotes = quoteCollection.Quotes.Where(q => q.QuoteNumber == quoteNumber);

            switch (filteredQuotes.Count())
            {
            case 1:
                return(QuoteUtils.BuildResponseFor(filteredQuotes.First()));

            default:
                return(BuildResponseForNoMatchingQuotes(quoteNumber));
            }
        }
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var clientName  = fulfillmentRequest.GetParameter(Constants.Variables.ClientName);
            var serviceName = fulfillmentRequest.GetParameter(Constants.Variables.ServiceName);

            var quotesCollection = await jobberClient.GetQuotesAsync();

            var filteredQuotes = quotesCollection.Quotes
                                 .Where(q => q.Client.Name.ContainsIgnoringCase(clientName))
                                 .Where(q => DoesLineItemsMatchUserQuery(q.LineItems, serviceName));

            switch (filteredQuotes.Count())
            {
            case 0:
                return(BuildResponseForNoMatchingQuotes());

            case 1:
                return(QuoteUtils.BuildResponseFor(filteredQuotes.First()));

            default:
                return(BuildResponseForMuiltipleMatchesFor(fulfillmentRequest, filteredQuotes));
            }
        }
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var userId         = fulfillmentRequest.GetCurrentUserId();
            var userCollection = await jobberClient.GetUserAsync(userId);

            var user = userCollection.Users;
            var chipSuggestionMessage = GoogleChipMessage.From(user.PossibleActions().Values.ToList());

            return(FulfillmentResponseBuilder.Create()
                   .Speech("I have listed some functionalities as suggestions")
                   .WithMessage(chipSuggestionMessage)
                   .Build());
        }
Esempio n. 16
0
        public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient)
        {
            var clientName      = fulfillmentRequest.GetParameter(Constants.Variables.ClientName);
            var matchingClients = await jobberClient.GetClientsAsync(clientName);

            switch (matchingClients.Count)
            {
            case 0:
                return(BuildClientNotFoundResponse(clientName));

            case 1:
                return(BuildClientFoundResponse(matchingClients.Clients.First()));

            default:
                return(BuildMultipleClientsFound(clientName, matchingClients));
            }
        }