Example #1
0
        public SpendSummary GetTotalSpend(int supplierId)
        {
            var spendSummary = new SpendSummary();

            var supplier = _supplierService.GetById(supplierId);

            if (!supplier.IsExternal)
            {
                var invoices     = _invoiceRepository.Get();
                var spendDetails = from invoice in invoices
                                   group invoice by invoice.InvoiceDate.Year into g
                                   select new SpendDetail()
                {
                    TotalSpend = g.Sum(x => x.Amount),
                    Year       = g.Key
                };
                spendSummary.Name  = supplier.Name;
                spendSummary.Years = spendDetails.ToList();
            }
            else
            {
                var externalInvoices = _externalInvoiceProcessor.Process(supplierId);

                var spendDetails = from invoice in externalInvoices
                                   group invoice by invoice.Year into g
                                   select new SpendDetail()
                {
                    TotalSpend = g.Sum(x => x.TotalAmount),
                    Year       = g.Key
                };
                spendSummary.Name  = supplier.Name;
                spendSummary.Years = spendDetails.ToList();
            }
            return(spendSummary);
        }
        public SpendSummary GetTotalSpend(int supplierId)
        {
            var supplier = this.supplierService.GetById(supplierId);

            if (!supplier.IsExternal) //Internal Repository
            {
                this.spendSummary = supplier.SpendSummary(this.invoiceRepository);
            }
            else //External Service
            {
                this.externalInvoiceServiceManager.supplier = supplier;
                this.spendSummary = this.externalInvoiceServiceManager.TryGetSpendSummaryFromExternalService(supplier, ExternalInvoiceService.GetInvoices);
            }
            return(this.spendSummary);
        }
        private void ExternalInvoiceServiceManager_EventExternalInvoiceServiceFailed(object sender, System.EventArgs e)
        {
            var serviceManagerArgs = e as ServiceManagerArgs;

            consecutiveErrors = consecutiveErrors + 1;
            if (consecutiveErrors > 3)
            {
                var failOverService  = new FailoverInvoiceService();
                var failOverInvoices = failOverService.GetInvoices(serviceManagerArgs.supplier.Id);
                this.spendSummary = this.externalInvoiceServiceManager.TryGetSpendSummaryFromFailoverService(serviceManagerArgs.supplier, failOverInvoices);
            }
            else
            {
                this.spendSummary = this.externalInvoiceServiceManager.TryGetSpendSummaryFromExternalService(serviceManagerArgs.supplier, ExternalInvoiceService.GetInvoices);
            }
        }
        private void ExternalInvoiceServiceManager_EventDataNotRefreshed(object sender, System.EventArgs e)
        {
            var serviceManagerArgs = e as ServiceManagerArgs;

            consecutiveErrors = consecutiveErrors + 1;
            if (consecutiveErrors > 6)
            {
                _autoEvent = new AutoResetEvent(false);
                tm         = new Timer(Execute, _autoEvent, 1000, 1000);
            }
            else
            {
                var failOverService  = new FailoverInvoiceService();
                var failOverInvoices = failOverService.GetInvoices(serviceManagerArgs.supplier.Id);
                this.spendSummary = this.externalInvoiceServiceManager.TryGetSpendSummaryFromFailoverService(serviceManagerArgs.supplier, failOverInvoices);
            }
        }
 private void ExternalInvoiceServiceManager_EventSuccess(object sender, EventArgs e)
 {
     this.spendSummary = this.externalInvoiceServiceManager.spendSummary;
 }
 public void Execute(Object stateInfo)
 {
     this.spendSummary = this.externalInvoiceServiceManager.TryGetSpendSummaryFromExternalService(stateInfo as Supplier, ExternalInvoiceService.GetInvoices);
     tm.Dispose();
 }