示例#1
0
        public async Task <List <ClientBilling> > GetBillingForClientsAsync(List <Client> clients, DateTime startDate, DateTime endDate)
        {
            try
            {
                string sessionId = "";
                AdescomCTMSoapWrapper atmanCTMWithoutProxyClassesClient = new AdescomCTMSoapWrapper(_configuration);
                BillingQueryOptions   billingQueryOptions = new BillingQueryOptions()
                {
                    incoming            = false,
                    outgoing            = true,
                    includeZeroDuration = false
                };

                ConcurrentBag <ClientBilling> clientsBillings = new ConcurrentBag <ClientBilling>();

                sessionId = await atmanCTMWithoutProxyClassesClient.LoginAsync(
                    _configuration.GetValue <string>("WebServiceConnectionSettings:ResellerLogin"),
                    _configuration.GetValue <string>("WebServiceConnectionSettings:ResellerPassword"),
                    _configuration.GetValue <int>("WebServiceConnectionSettings:SessionTimeout"));

                Parallel.ForEach(clients, new ParallelOptions {
                    MaxDegreeOfParallelism = 20
                }, (client) =>
                {
                    GetBillingForClient(startDate, endDate, client, atmanCTMWithoutProxyClassesClient, billingQueryOptions, clientsBillings);
                });

                await atmanCTMWithoutProxyClassesClient.LogoutAsync(sessionId);

                return(clientsBillings.ToList());
            }
            catch (AggregateException ex)
            {
                throw new Exception(ex.InnerException.Message);
            }
        }
示例#2
0
        private async void GetBillingForClient(DateTime fromDate, DateTime toDate, Client client, AdescomCTMSoapWrapper atmanCTMWithoutProxyClassesClient, BillingQueryOptions billingQueryOptions, ConcurrentBag <ClientBilling> clientsBillings)
        {
            try
            {
                List <BillingRecord>  billingRecords        = new List <BillingRecord>();
                BillingRecordsArrayEx billingRecordsArrayEx = atmanCTMWithoutProxyClassesClient.GetBillingForClientAsync(client.Id, fromDate, toDate).Result;

                if (billingRecordsArrayEx != null && billingRecordsArrayEx.totalCount > 0)
                {
                    foreach (BillingRecordEx billingRecordEx in billingRecordsArrayEx.items)
                    {
                        double price          = 0;
                        double priceInclTaxes = 0;

                        if (billingRecordEx.price.HasValue)
                        {
                            price = billingRecordEx.price.Value;
                        }

                        if (billingRecordEx.priceInclTaxes.HasValue)
                        {
                            priceInclTaxes = billingRecordEx.priceInclTaxes.Value;
                        }

                        billingRecords.Add(new BillingRecord(billingRecordEx.startDate, billingRecordEx.source, Utils.RemoveCountryCodeFromTelephoneNumber(
                                                                 _configuration.GetValue <string>("ApplicationSettings:CountryCode"),
                                                                 _configuration.GetValue <int>("ApplicationSettings:NumberOfDigitsForAreaAndShortCLID"),
                                                                 billingRecordEx.destination),
                                                             billingRecordEx.duration,
                                                             price));
                    }
                }

                // Billing records filtering by destination
                clientsBillings.Add(new ClientBilling(client, fromDate, toDate, billingRecords.
                                                      Where(r => ((r.Price != 0) && !(r.Destination.Any(n => char.IsLetter(n)))))
                                                      .ToList()));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }