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