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