public static BusinessSummaryListViewModel GetBusinessSummaryByUser(string username)
        {
            Entities entities = new Entities();
            BusinessSummaryListViewModel result = new BusinessSummaryListViewModel();
            DateTime current = DateTime.Now;

            var businesss = entities.Assets.Include("Incomes").Include("Liabilities").Where(x => x.Username.Equals(username) &&
                                                                                            x.AssetType == (int)Constants.Constants.ASSET_TYPE.BUSINESS &&
                                                                                            !x.DisabledDate.HasValue);

            foreach (var business in businesss)
            {
                BusinessSummaryViewModel businessViewModel = new BusinessSummaryViewModel();
                businessViewModel.Name  = business.AssetName;
                businessViewModel.Value = business.Value;
                if (business.Incomes1.Where(x => !x.DisabledDate.HasValue).Any())
                {
                    businessViewModel.Income = business.Incomes1.FirstOrDefault().Value;
                }
                else
                {
                    businessViewModel.Income = 0;
                }
                businessViewModel.AnnualIncome = businessViewModel.Income * 12;
                businessViewModel.RentYield    = businessViewModel.Value > 0 ? businessViewModel.AnnualIncome / businessViewModel.Value : 0;

                foreach (var liability in business.Liabilities.Where(x => !x.DisabledDate.HasValue))
                {
                    BusinessLiabilityViewModel liabilityViewModel = BusinessLiabilityQueries.CreateViewModel(liability);
                    if (liabilityViewModel.StartDate <= current && liabilityViewModel.EndDate >= current)
                    {
                        businessViewModel.LiabilityValue          += liabilityViewModel.Value.Value;
                        businessViewModel.InterestRate            += liabilityViewModel.InterestRate.Value;
                        businessViewModel.OriginalInterestPayment += liabilityViewModel.OriginalInterestPayment;
                        businessViewModel.MonthlyInterestPayment  += liabilityViewModel.MonthlyInterestPayment;
                        businessViewModel.MonthlyPayment          += liabilityViewModel.TotalMonthlyPayment;
                        businessViewModel.AnnualPayment           += liabilityViewModel.TotalPayment;
                        businessViewModel.RemainedValue           += liabilityViewModel.RemainedValue;
                    }
                }
                result.BusinessSummaries.Add(businessViewModel);
            }

            result.TotalIncome         = result.BusinessSummaries.Sum(x => x.Income);
            result.TotalAnnualIncome   = result.BusinessSummaries.Sum(x => x.AnnualIncome);
            result.TotalValue          = result.BusinessSummaries.Sum(x => x.Value);
            result.TotalRentYield      = result.TotalValue > 0 ? result.BusinessSummaries.Sum(x => x.AnnualIncome) / result.TotalValue : 0;
            result.TotalLiabilityValue = result.BusinessSummaries.Sum(x => x.LiabilityValue);
            result.TotalInterestRate   = result.TotalLiabilityValue > 0 ? result.BusinessSummaries.Sum(x => x.OriginalInterestPayment) / result.TotalLiabilityValue * 12 : 0;
            result.TotalMonthlyPayment = result.BusinessSummaries.Sum(x => x.MonthlyPayment);
            result.TotalAnnualPayment  = result.BusinessSummaries.Sum(x => x.AnnualPayment);
            result.TotalRemainedValue  = result.BusinessSummaries.Sum(x => x.RemainedValue);

            return(result);
        }
Exemple #2
0
        public JsonNetResult GetOrderTotals()
        {
            var model = new BusinessSummaryViewModel();


            // Get the data
            dynamic ordertotals;

            using (var context = Exigo.Sql())
            {
                var query = context.QueryMultiple(@"
               -- Orders Summary
                SELECT  
                    o.OrderStatusID, 
                    OrderCount = count(*), 
                    OrderTotal = COALESCE(sum(o.SubTotal), 0)
                FROM Orders o
                WHERE 
                    o.OrderDate >= @startdate AND o.OrderDate < @enddate
                GROUP BY 
                    o.OrderStatusID


                -- Pending Autoship Totals
                SELECT OrderTotal = COALESCE(sum(o.SubTotal), 0)
                FROM
	                Orders o
                WHERE
	                o.AutoOrderID IS NOT NULL
	                AND o.OrderStatusID IN (1, 5, 6)
                    AND o.OrderDate >= @startdate AND o.OrderDate < @enddate

                OPTION(MAXDOP 8)
            ", new
                {
                    startdate = DateTime.Now.BeginningOfMonth(),
                    enddate   = DateTime.Now.AddMonths(1).BeginningOfMonth()
                });

                ordertotals = query.Read().ToList();
                model.PendingAutoshipsTotal = query.Read <decimal>().FirstOrDefault();
            }


            // Process the data
            foreach (var row in ordertotals)
            {
                switch ((int)row.OrderStatusID)
                {
                case OrderStatuses.Accepted:
                    model.AcceptedOrdersTotal += row.OrderTotal;
                    model.AcceptedOrdersCount  = row.OrderCount;
                    break;

                case OrderStatuses.ACHDeclined:
                    model.DeclinedOrdersTotal   += row.OrderTotal;
                    model.ACHDeclinedOrdersCount = row.OrderCount;
                    break;

                case OrderStatuses.ACHPending:
                    model.ACHPendingOrdersTotal += row.OrderTotal;
                    model.ACHPendingOrdersCount  = row.OrderCount;
                    break;

                case OrderStatuses.Cancelled:
                    model.CancelledOrdersTotal += row.OrderTotal;
                    model.CancelledOrdersCount  = row.OrderCount;
                    break;

                case OrderStatuses.CCDeclined:
                    model.DeclinedOrdersTotal  += row.OrderTotal;
                    model.CCDeclinedOrdersCount = row.OrderCount;
                    break;

                case OrderStatuses.CCPending:
                    model.CCPendingOrdersTotal += row.OrderTotal;
                    model.CCPendingOrdersCount  = row.OrderCount;
                    break;

                case OrderStatuses.Incomplete:
                    model.DeclinedOrdersTotal  += row.OrderTotal;
                    model.IncompleteOrdersCount = row.OrderCount;
                    break;

                case OrderStatuses.Pending:
                    model.CCPendingOrdersTotal += row.OrderTotal;
                    model.PendingOrdersCount    = row.OrderCount;
                    break;

                case OrderStatuses.Printed:
                    model.AcceptedOrdersTotal += row.OrderTotal;
                    model.PrintedOrdersCount   = row.OrderCount;
                    break;

                case OrderStatuses.Shipped:
                    model.AcceptedOrdersTotal += row.OrderTotal;
                    model.ShippedOrdersCount   = row.OrderCount;
                    break;

                case OrderStatuses.PendingInventory:
                default:
                    break;
                }
            }



            // Return the data
            return(new JsonNetResult(new
            {
                data = model
            }));
        }