static List <BillingItem> GetBillingItemsFromTable(CloudTable billingItems, InvoiceGenerationRequest request)
        {
            TableQuery <BillingItem> query = new TableQuery <BillingItem>()
                                             .Where(
                TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, $"{request.CustomerCode}-{request.Year}-{request.Month}")
                );

            var querySegment = billingItems.ExecuteQuerySegmentedAsync(query, null);
            var items        = new List <BillingItem>();

            foreach (BillingItem item in querySegment.Result)
            {
                items.Add(item);
            }
            return(items);
        }
        public static void Run(
            [BlobTrigger("active-lists/{name}", Connection = "AzureWebJobsStorage")] Stream myBlob, string name,
            [Table("billingItems")] ICollector <BillingItem> billingItems,
            [Queue("invoice-generation-request")] out InvoiceGenerationRequest queueRequest,
            ILogger log)
        {
            log.LogInformation($"[GenerateBillingItemsFunc] Blob Trigger. Function processed blob: {name} Bytes");

            var activeList = ActiveListParser.Parse(name, myBlob);
            var generator  = new BillingItemGenerator();
            var priceList  = GetPriceList(activeList.CustomerCode);

            foreach (var bi in generator.Generate(activeList, priceList))
            {
                billingItems.Add(bi);
            }

            queueRequest = InvoiceGenerationRequest.ForActiveList(activeList);
        }
        public static InvoiceGenerationResponse GenerateInvoiceRequest(InvoiceGenerationRequest request)
        {
            var apiUrl  = _configuration.FelApiUrl;
            var payload = JsonConvert.SerializeObject(request);
            var content = new StringContent(payload, Encoding.UTF8);

            content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");

            var response = _client.PostAsync(apiUrl, content).Result;

            var responsePayload = response.Content
                                  .ReadAsStringAsync()
                                  .Result;

            if (response.IsSuccessStatusCode)
            {
                return(BuildSuccessResponse(responsePayload));
            }

            return(BuildErrorResponse(responsePayload));
        }
        public static void Run(
            [QueueTrigger("invoice-generation-request")] InvoiceGenerationRequest request,
            [Table("billingItems")] CloudTable billingItems,
            [CosmosDB("crm", "invoices", ConnectionStringSetting = "cosmosDb")] out dynamic generatedInvoice,
            [Queue("invoice-print-request")] out InvoicePrintRequest printRequest,
            [Queue("invoice-notification-request")] out InvoiceNotificationRequest notificationRequest,
            ILogger log)
        {
            log.LogInformation($"[GenerateInvoiceFunc] Queue trigger. Function processed: {request.CustomerCode} {request.Year} {request.Month}");

            var generator = new InvoiceGenerator();
            var items     = GetBillingItemsFromTable(billingItems, request);
            var invoice   = generator.Generate(request, items);

            generatedInvoice = invoice;

            printRequest = new InvoicePrintRequest {
                InvoiceToPrint = invoice
            };
            notificationRequest = new InvoiceNotificationRequest {
                InvoiceForNotification = invoice
            };
        }