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